package com.itheima.springboot01_04integration.controller;

import com.alibaba.fastjson.JSONArray;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.itheima.springboot01_04integration.pojo.User;
import com.itheima.springboot01_04integration.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author zhangyan
 * @date 2021/3/1 22:40
 * <p>
 * 改造:
 * 1. 如果redis中存在数据,从redis读取
 * 2. 如果redis中不存在数据,查询数据库,并存入redis
 */

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/findAll")
    public List<User> findAll() {
        return userService.findAll();
    }

    @RequestMapping("/findAllStr")
    public String findAllStr() {
        /**
         1.redis中查找数据
         2.有数据 --- 直接返回
         3.无数据 ---
         -- 数据库查询
         -- 对象转字符串，存放到redis
         -- 返回结果
         */

        //1. 查询redis数据库(启动redis服务)
        String userListStr = (String) redisTemplate.opsForValue().get("userListStr");
        //判断
        if (userListStr != null && userListStr.length() > 0) {
            //存在,直接返回
            return userListStr;

        } else {

            //不存在,查询数据库,并存入redis
            List<User> userList = userService.findAll();

            //userList转换json字符串(FastJson)
            Object obj = JSONArray.toJSON(userList);
            userListStr = obj.toString();

            //存入redis
            redisTemplate.opsForValue().set("userListStr",userListStr);
        }

        return userListStr;
    }
}
